package com.gzhu.knowledgeAdmin.controller;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.net.URISyntaxException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

// 在多个任务间分配机器人数量

@Slf4j
@Controller
@RequestMapping({"/zs/ai/outbound"})
public class Bot_Allot_controller {

    @ResponseBody
    @RequestMapping(value={ "/BotAllot"}, method= {RequestMethod.POST})
    public JSONObject BotAllot(@RequestBody Map params) throws URISyntaxException, IOException, InterruptedException, ParseException {
//
//        //返回初始化
        JSONObject rtn_error = new JSONObject();
        rtn_error.put("success", false);      //成功标志
        rtn_error.put("code",  -1);            //状态码
        rtn_error.put("message", "");          //提示信息
        rtn_error.put("data", "");            //结果数据
//        //返回初始化
        JSONObject rtn_right = new JSONObject();
        rtn_right.put("success", true);       //成功标志
        rtn_right.put("code",  20000);            //状态码
        rtn_right.put("message", "");         //提示信息
        rtn_right.put("data", "");            //结果数据
//
        //入口参数:公司id,任务ids(Arraylist数组)
        String company_id = (String) params.get("company_id");
        ArrayList task_ids = (ArrayList) params.get("task_ids");
        System.out.println("company_id: " + company_id + " task_ids:" + task_ids);

//        //零个任务
//        if (task_ids.size() == 0)
//        {
//            rtn_right.put("message", "任务为空");         //提示信息
//            return rtn_right;
//        }
//        //一个或多个任务
//        else
//        {
//            boolean rtn = AIRobotAssignment(company_id, task_ids);
//            if (rtn == true){
//                System.out.println("机器人分配成功");
//                return rtn_right;
//            }
//            else
//            {
//                System.out.println("机器人分配失败");
//                return rtn_error;
//            }
//        }
//
//    }
//
//    public boolean AIRobotAssignment(String company_id, ArrayList<String> task_ids) throws ParseException, IOException, InterruptedException {
//        boolean rtn = true;
//
//        double total = 0.0;         //总权重
//        double day_remaining = 0.0;     //剩余天数
//        double task_remaining = 0.0;    //剩余任务
//        double task_priority = 0.0;     //任务优先级
//        int total_robot = 0;        //总机器人数
//
//        //购买的总机器人数量
//        System.out.println("读取公司信息表");
//        Session mysqlSession = DataSourceSessionFactory.getMySQLDBSession();
//        try {
//            String mysql_str = "SELECT F_JQRSL from t_gsxx_t where F_GSID =:gsid";
//            NativeQuery nativeQuery2 = mysqlSession.createSQLQuery(mysql_str);
//            nativeQuery2.setParameter("gsid",company_id);
//            List<Integer> list = nativeQuery2.list();
//            //只查询一条记录出来
//            if (list.size() != 1) {
//                return false;
//            }
//            for (Integer i : list) {
//                total_robot = i;
//            }
//        } catch (Exception exception) {
//            System.out.println("DB error");
//            return false;
//        } finally {
//            if (mysqlSession != null) {
//                mysqlSession.close();
//            }
//        }
//
//        //计算总权重
//        ArrayList<Double> task_ids_priority = new ArrayList<>();
//        for(int i=0; i<task_ids.size(); i++){
//            long task_id = Integer.valueOf(task_ids.get(i));
//
//            DataRwPO dataRwPO = new DataRwPO();
//            dataRwPO = GetTask.GetData(company_id, task_id);
//
//            //当天与结束日期之间的天数
//            Date now = new Date();
//            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
//            if (dataRwPO == null)
//            {
//                System.out.println(task_id + " 任务不存在");
//                return false;
//            }
//            if(dataRwPO.getF_RWJSRQ()==null)
//            {
//                System.out.println("任务结束日期错误");
//                return false;
//            }
//            Date end = dataRwPO.getF_RWJSRQ();
//            day_remaining = Util.daysBetween(now,end);
//            if(day_remaining<0)
//            {
//                System.out.println(task_id + " 任务已结束");
//                continue;
//            }
//            //计算优先级
//            if (dataRwPO.getF_RWYX() == 0)
//                task_priority = 25.0;
//            else if (dataRwPO.getF_RWYX() == 1)
//                task_priority = 50.0;
//
//            //计算剩余任务数
//            mysqlSession = DataSourceSessionFactory.getMySQLDBSession();
//            try {
//                Transaction txn = mysqlSession.beginTransaction();
//                //从t_rwmx_t表统计F_ZT！=4的记录
//                String mysql_str = "SELECT F_ID from t_rwmx_t where F_GSID =:gsid and F_RWID=:rwid and F_ZT<>4";
//                NativeQuery nativeQuery2 = mysqlSession.createSQLQuery(mysql_str);
//                nativeQuery2.setParameter("gsid",company_id);
//                nativeQuery2.setParameter("rwid",task_id);
//                List<Integer> list = nativeQuery2.list();
//                task_remaining = list.size();    //用size统计
//                //任务剩余量写入t_rw_t表
//                mysql_str = "UPDATE t_rw_t SET F_RWSYL = ?1 WHERE F_GSID = ?2 AND F_RWID = ?3";
//                nativeQuery2 = mysqlSession.createSQLQuery(mysql_str);
//                nativeQuery2.setParameter(2,company_id);
//                nativeQuery2.setParameter(3,task_id);
//                nativeQuery2.setParameter(1,task_remaining);
//                nativeQuery2.executeUpdate();
//
//                txn.commit();
//
//            } catch (Exception exception) {
//                System.out.println("DB error");
//                return false;
//            } finally {
//                if (mysqlSession != null) {
//                    mysqlSession.close();
//                }
//            }
//            //计算综合优先级
//            double priority = day_remaining*0.4 + task_priority*0.3 + task_remaining*0.3;
//            task_ids_priority.add(priority);
//            total = total + priority;
//        }
//
//        //按照权重为每个任务分配机器人数量
//        if (total<=0.0)
//        {
//            System.out.println("无需分配机器人");
//            return true;
//        }
//        int robot_remaining = total_robot;
//        for(int i=0; i<task_ids.size();i++){
//            long task_id = Integer.valueOf(task_ids.get(i));
//            if (robot_remaining>0) {
//
//                //分配机器人
//                int bot = (int)Math.ceil(total_robot * task_ids_priority.get(i) / total );
//
//                //写入数据库
//                mysqlSession = DataSourceSessionFactory.getMySQLDBSession();
//                try {
//                    Transaction txn = mysqlSession.beginTransaction();
//                    String mysql_str = "UPDATE t_rw_t SET F_RWBFS = ?1 WHERE F_GSID = ?2 AND F_RWID = ?3";
//                    NativeQuery nativeQuery2 = mysqlSession.createSQLQuery(mysql_str);
//                    nativeQuery2.setParameter(2,company_id);
//                    nativeQuery2.setParameter(3,task_id);
//                    nativeQuery2.setParameter(1,bot);
//                    nativeQuery2.executeUpdate();
//                    txn.commit();
//                } catch (Exception exception) {
//                    System.out.println("DB error");
//                } finally {
//                    if (mysqlSession != null) {
//                        mysqlSession.close();
//                    }
//                }
//
//                //每个循环分配后剩余数量
//                robot_remaining = robot_remaining - bot;
//            }
//        }

        return rtn_right;

    }


}
